package com.example.demo.service.system;

import com.example.demo.common.page.PageResult;
import com.example.demo.dto.system.UserDTO;
import com.example.demo.dto.system.UserQueryDTO;
import com.example.demo.entity.system.SysUser;

import java.util.List;

/**
 * 用户服务接口
 */
public interface SysUserService {
    
    /**
     * 根据用户名查询用户
     *
     * @param username 用户名
     * @return 用户对象
     */
    SysUser selectUserByUsername(String username);
    
    /**
     * 根据ID查询用户
     *
     * @param userId 用户ID
     * @return 用户对象
     */
    SysUser selectUserById(Long userId);
    
    /**
     * 查询用户列表
     *
     * @param user 用户信息
     * @return 用户集合
     */
    List<SysUser> selectUserList(SysUser user);
    
    /**
     * 分页查询用户列表
     *
     * @param queryDTO 查询参数
     * @return 分页结果
     */
    PageResult<SysUser> selectUserPage(UserQueryDTO queryDTO);
    
    /**
     * 根据ID查询用户详细信息（包含动态字段）
     *
     * @param userId 用户ID
     * @param systemCode 系统编码
     * @return 用户DTO
     */
    UserDTO selectUserDetail(Long userId, String systemCode);
    
    /**
     * 新增用户
     *
     * @param userDTO 用户信息
     * @return 结果
     */
    int insertUser(UserDTO userDTO);
    
    /**
     * 修改用户
     *
     * @param userDTO 用户信息
     * @return 结果
     */
    int updateUser(UserDTO userDTO);
    
    /**
     * 修改用户状态
     *
     * @param userId 用户ID
     * @param status 状态
     * @return 结果
     */
    int updateUserStatus(Long userId, Integer status);
    
    /**
     * 删除用户
     *
     * @param userId 用户ID
     * @return 结果
     */
    int deleteUserById(Long userId);
    
    /**
     * 批量删除用户
     *
     * @param userIds 用户ID数组
     * @return 结果
     */
    int deleteUserByIds(Long[] userIds);
    
    /**
     * 用户登录
     *
     * @param username 用户名
     * @param password 密码
     * @return 用户对象
     */
    SysUser login(String username, String password);
    
    /**
     * 校验用户名是否唯一
     *
     * @param username 用户名
     * @return 结果
     */
    boolean checkUsernameUnique(String username);
    
    /**
     * 校验手机号是否唯一
     *
     * @param user 用户信息
     * @return 结果
     */
    boolean checkPhoneUnique(SysUser user);
    
    /**
     * 校验邮箱是否唯一
     *
     * @param user 用户信息
     * @return 结果
     */
    boolean checkEmailUnique(SysUser user);
} 